package com.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect //标注这是个切面  注解
//使用配置文件方式 配置切面是最实用的
@SuppressWarnings("all")
public class AnnAop {
    //切点前
    @Before("execution(* com.aop.UserServicesImpl.*(..))")
    public void befor(){
        System.out.println("方法执行前！");
    }
    //切点后
    @After("execution(* com.aop.UserServicesImpl.*(..))")
    public void after(){
        System.out.println("方法执行后！");
    }

    // 环绕增强 给定一个参数即切入点
    @Around("execution(* com.aop.UserServicesImpl.*(..))")
                        //切入点
    public void  around(ProceedingJoinPoint pj){

        try {
            System.out.println("环绕执行前!!!");
            //切入点执行方法
            Object object = pj.proceed();
            System.out.println("环绕执行后");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }
}
